using Engine.Graphics;
using Engine.Shape;
using SharpDX;
using System.Runtime.CompilerServices;

    [assembly: InternalsVisibleTo("UnitTestsScenarioEditor")]
namespace Scenario_Editor.Tools
{
    /// <summary>
    /// An interface to correspondent with the terrain.
    /// </summary>
    ///
    public interface ITerrain
    {
        #region Public Methods

        /// <summary>
        /// Returns the height from the give position.
        /// </summary>
        /// <param name="positionOnTerrain">the current position</param>
        /// <returns>the height at the position</returns>
        float GetHeightFromPosition(Vector3 positionOnTerrain);

        /// <summary>
        /// Register a mesh to the terrain.
        /// </summary>
        /// <param name="mesh"></param>
        void RegisterMesh(Meshobject mesh);

        /// <summary>
        /// Register a shape to the terrain.
        /// </summary>
        /// <param name="shape"></param>
        void RegisterShape(Shapes shape);

        /// <summary>
        /// Unregister a mesh from the terrain.
        /// </summary>
        /// <param name="mesh"></param>
        void UnRegisterMesh(Meshobject mesh);

        /// <summary>
        /// Unregister a mesh from the terrain.
        /// </summary>
        /// <param name="shape"></param>
        void UnRegisterShape(Shapes shape);

        /// <summary>
        /// Updates the mesh ids in the terrain.
        /// </summary>
        /// <param name="mesh"></param>
        void UpdateMeshIds(Meshobject mesh);

        /// <summary>
        /// Updates the shape ids.
        /// </summary>
        /// <param name="shape"></param>
        void UpdateShapeIDs(Shapes shape);

        #endregion Public Methods
    }
}